001 /** 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: Nov 27, 2002 005 * Time: 9:11:28 PM 006 */ 007 008 package EVolve.visualization.XYViz.ValRefViz.HotSpotViz; 009 010 import EVolve.data.*; 011 import EVolve.visualization.*; 012 import EVolve.visualization.Dimension; 013 import EVolve.util.painters.PredictionPainter; 014 import javax.swing.*; 015 import java.awt.*; 016 017 public class PredictionViz extends HotSpotVisualization{ 018 private PredictorFactory[] factory; // predictor factories 019 private PredictorFactory selectedFactory; // predictor factory in use 020 private Predictor[] predictor; // predictors 021 private JComboBox comboPredictor; // combobox for selecting predictor factory 022 023 public PredictionViz(PredictorFactory[] factory) { 024 super(); 025 this.factory = factory; 026 painters[0] = new PredictionPainter(); 027 painters[1] = painters[0]; 028 } 029 030 public Dimension[] createDimension() { 031 Dimension [] returnDimension = new Dimension[3]; 032 033 xAxis = new ValueDimension(); 034 yAxis = new ReferenceDimension(); 035 zAxis = new ReferenceDimension(); 036 returnDimension[0] = xAxis; 037 returnDimension[1] = yAxis; 038 returnDimension[2] = zAxis; 039 040 return returnDimension; 041 } 042 043 protected JPanel createConfigurationPanel() { 044 configurationPanel = new JPanel(new GridLayout(2, 1, 5, 5)); 045 046 selectedFactory = factory[0]; 047 048 JPanel panelTop = new JPanel(new FlowLayout()); 049 configurationPanel.add(panelTop); 050 051 panelTop.add(new JLabel("Predictor: ")); 052 053 comboPredictor = new JComboBox(); 054 for (int i = 0; i < factory.length; i++) { 055 comboPredictor.addItem(factory[i].getName()); 056 } 057 panelTop.add(comboPredictor); 058 059 JPanel returnValue = super.createConfigurationPanel(); 060 061 comboPainter.removeItemAt(0); 062 return returnValue; 063 } 064 065 public void preVisualize() { 066 predictor = new Predictor[yAxis.getMaxEntityNumber()]; 067 for (int i = 0; i < predictor.length; i++) { 068 predictor[i] = selectedFactory.createPredictor(); 069 } 070 super.preVisualize(); 071 } 072 073 public void receiveElement(Element element) { 074 if (element.isOptional()) return; 075 076 long x = xAxis.getField(element); 077 long y = yAxis.getField(element); 078 long z = zAxis.getField(element); 079 080 phaseDetector.collectData(x/interval,y); 081 082 paint(x,y,zAxis.getEntityFromInt((int)z).getId()); 083 } 084 085 public void visualize() { 086 yAxis.addComparator(new ValueComparator("Miss", false, ((PredictionPainter)painter).getMiss(),yAxis.getEntityName2IntMap())); 087 sort(); 088 } 089 090 protected void updateConfiguration() { 091 if (autoPredictorname == null) 092 selectedFactory = factory[comboPredictor.getSelectedIndex()]; 093 else { 094 for (int i=0; i < factory.length; i++) { 095 if (factory[i].getName().equals(autoPredictorname)) { 096 selectedFactory = factory[i]; 097 break; 098 } 099 } 100 } 101 102 super.updateConfiguration(); 103 } 104 105 public PredictorFactory getPredictor() { 106 return selectedFactory; 107 } 108 109 protected void installPainter() { 110 ((PredictionPainter)painters[0]).setPredictor(predictor,zAxis.getDataFilter().getTargetType()); 111 super.installPainter(); 112 } 113 114 public Object clone() { 115 PredictionViz o = (PredictionViz) super.clone(); 116 o.factory = new PredictorFactory[factory.length]; 117 for (int i=0; i<factory.length; i++) { 118 o.factory[i] = (PredictorFactory)factory[i].clone(); 119 } 120 o.selectedFactory = (PredictorFactory)selectedFactory.clone(); 121 if (predictor != null) { 122 o.predictor = new Predictor[predictor.length]; 123 for (int i=0; i<predictor.length; i++) 124 o.predictor[i] = (Predictor)predictor[i].clone(); 125 } 126 return o; 127 } 128 }